// var n;
// exports.GameDataMgr = void 0;
// var r;
// var $dataManager = require("./DataManager");
// var $eventManager = require("./EventManager");
// var $tipsManager = require("./TipsManager");
// var $commonUtils = require("./CommonUtils");
// var $const_Common = require("./Const_Common");
// var $evenType = require("./EvenType");
// var $excel = require("./Excel");
// var $gameBagData = require("./GameBagData");
// !(function (e) {
//     e.level = "level";
//     e.tiaozhanlevel = "tiaozhanlevel";
//     e.gameBag = "gameBag";
// })(r || (r = {}));
// var g = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t._secret_key = "game";
//         t._level = {
//             1: {
//                 ispass: !1,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 awardjilu: 0,
//                 citiaodata: null,
//                 level: 1,
//                 huanyipi: 0,
//                 allhave: 0,
//                 rolelevel: 0
//             }
//         };
//         t._tiaozhanlevel = {
//             1: {
//                 isjixu: !1,
//                 ispass: !1,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 level: 1,
//                 leijifen: 0,
//                 awardjilu: null
//             }
//         };
//         t._gameBag = new $gameBagData.GameBagData.BagSaveData();
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.init = function (e) {
//         if (void 0 === e) {
//             e = null;
//         }
//         this.resetData();
//         var t = this.getNowData(r.level, e);
//         this._level = __assign(__assign({}, this._level), t);
//         var o = this.getNowData(r.tiaozhanlevel, e);
//         this._tiaozhanlevel = __assign(__assign({}, this._tiaozhanlevel), o);
//         var n = this.getNowData(r.gameBag, e);
//         this._gameBag = __assign(__assign({}, this._gameBag), n);
//     };
//     t.prototype.getNowData = function (e, t) {
//         var o = null;
//         if (!(t && (o = t[e]))) {
//             o = this._load(e);
//         }
//         return o;
//     };
//     t.prototype.resetData = function () {
//         this._level = {
//             1: {
//                 ispass: !1,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 awardjilu: 0,
//                 citiaodata: null,
//                 level: 1,
//                 huanyipi: 0,
//                 allhave: 0,
//                 rolelevel: 0
//             }
//         };
//         this._tiaozhanlevel = {
//             1: {
//                 isjixu: !1,
//                 ispass: !1,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 level: 1,
//                 leijifen: 0,
//                 awardjilu: null
//             }
//         };
//         this._gameBag = new $gameBagData.GameBagData.BagSaveData();
//     };
//     t.prototype.nowLevelData = function (e) {
//         return this._level[e];
//     };
//     t.prototype.getCiTiaoCount = function (e, t) {
//         var o = this._level[e];
//         var n = 0;
//         if (o) {
//             switch (t) {
//                 case 1:
//                     n = o.huanyipi;
//                     break;
//                 case 2:
//                     n = o.allhave;
//             }
//         } else {
//             switch (t) {
//                 case 1:
//                     n = 10;
//                     break;
//                 case 2:
//                     n = 6;
//             }
//         }
//         return n;
//     };
//     t.prototype.cleanTiaoZhanLevel = function (e) {
//         this._tiaozhanlevel[e] = {
//             isjixu: !1,
//             ispass: !1,
//             maxboshu: 0,
//             nowboshu: 0,
//             level: 1,
//             leijifen: 0,
//             awardjilu: null
//         };
//         this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//     };
//     t.prototype.updateTiaoZhanFen = function (e, t) {
//         var o = this._tiaozhanlevel[e];
//         if (o) {
//             var n = o.leijifen;
//             if (!n) {
//                 n = 0;
//             }
//             n += t;
//             o.leijifen = n;
//             this._tiaozhanlevel[e] = o;
//             this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//             $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_TiaoZhan_JiFen);
//         }
//     };
//     t.prototype.getTiaoZhanFen = function (e) {
//         var t = this._tiaozhanlevel[e];
//         var o = 0;
//         if (t && t.leijifen) {
//             o = t.leijifen;
//         }
//         return o;
//     };
//     t.prototype.updateTiaoZhanJiXu = function (e, t) {
//         var o = this._tiaozhanlevel[e];
//         if (o) {
//             var n = o.isjixu;
//             n = t;
//             o.isjixu = n;
//             this._tiaozhanlevel[e] = o;
//             this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//         }
//     };
//     t.prototype.updateRoleLevel = function (e, t, o, n) {
//         if (2 == n) {
//             var i = this._level[e];
//             if (i) {
//                 var a = i.rolelevel;
//                 if (!a) {
//                     a = {};
//                 }
//                 a.level = t;
//                 a.levelexper = o;
//                 i.rolelevel = a;
//             }
//             this._level[e] = i;
//             this._save(r.level, this._level);
//         }
//     };
//     t.prototype.getRoleLevel = function (e, t) {
//         if (2 == t) {
//             var o = this._level[e];
//             if (o) {
//                 return o.rolelevel;
//             } else {
//                 return null;
//             }
//         }
//     };
//     t.prototype.updateNowLevel = function (e, t, o, n) {
//         if (2 == n) {
//             var i = this._level[e];
//             if (i) {
//                 i.huanyipi = t;
//                 i.allhave = o;
//             }
//             this._level[e] = i;
//             this._save(r.level, this._level);
//         }
//     };
//     t.prototype.unLockLevelPro = function (e) {
//         var t = this._level[e];
//         t = {
//             ispass: !1,
//             nowboshu: 0,
//             awardjilu: {},
//             level: e
//         };
//         this._level[e] = t;
//         this._save(r.level, this._level);
//     };
//     t.prototype.getJiXuGame = function () {
//         var e = Object.keys(this._level);
//         var t = null;
//         for (var o = 0; o < e.length; o++) {
//             var n = e[o];
//             var i = this._level[n];
//             var a = $excel.Excel.shuiguoguanqia(Number(n));
//             if (i && i.citiaodata) {
//                 if (a.levelboshuid.length <= i.maxboshu) {
//                     this.updateLevelPassState(Number(n), 2);
//                 }
//                 if (a.levelboshuid.length > i.nowboshu) {
//                     t = i;
//                 }
//                 break;
//             }
//         }
//         return t;
//     };
//     t.prototype.getJiXuTiaoZhan = function () {
//         return !!this._tiaozhanlevel[1].isjixu;
//     };
//     t.prototype.updateCiTiao = function (e, t) {
//         var o = this._level[e];
//         if (o) {
//             o.citiaodata = t ? t.concat() : null;
//         }
//         this._save(r.level, this._level);
//     };
//     t.prototype.getNowMaxLevel = function () {
//         var e = [];
//         var t = this._level;
//         for (var o in t)
//             if (t[o] && t[o].ispass) {
//                 e.push(Number(o));
//             }
//         if (
//             (e = e.sort(function (e, t) {
//                 if (e > t) {
//                     return 1;
//                 } else {
//                     return -1;
//                 }
//             })).length <= 0
//         ) {
//             return 0;
//         } else {
//             return e[e.length - 1];
//         }
//     };
//     t.prototype.updateLevelBoShu = function (e, t, o) {
//         if (1 == o) {
//             var n = this._tiaozhanlevel[e];
//             var i = $excel.Excel.shuiguotiaozhan(e);
//             if (n) {
//                 if (!(c = n.maxboshu)) {
//                     c = 0;
//                 }
//                 if (t > i.levelboshuid.length) {
//                     t = i.levelboshuid.length;
//                 }
//                 if (t >= c) {
//                     n.maxboshu = t;
//                 }
//                 n.nowboshu = t;
//             }
//             this._tiaozhanlevel[e] = n;
//             if (!i.levelboshuid[t]) {
//                 this.updateLevelPassState(e, o);
//                 var a = "无尽关卡通关";
//                 $commonUtils.default.SendPoint($const_Common.SendPointType.通关无尽关卡, a);
//             }
//             this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//         }
//         var c;
//         if (2 == o) {
//             n = this._level[e];
//             i = $excel.Excel.shuiguoguanqia(e);
//             if (n) {
//                 if (!(c = n.maxboshu)) {
//                     c = 0;
//                 }
//                 if (t > i.levelboshuid.length) {
//                     t = i.levelboshuid.length;
//                 }
//                 if (t >= c) {
//                     n.maxboshu = t;
//                     a = "章节" + e + "_" + t + "波";
//                     $commonUtils.default.SendPoint($const_Common.SendPointType.普通关卡进度, a);
//                 }
//                 n.nowboshu = t;
//             }
//             this._level[e] = n;
//             if (!i.levelboshuid[t]) {
//                 this.updateLevelPassState(e, o);
//             }
//             this._save(r.level, this._level);
//         }
//     };
//     t.prototype.updateLevelPassState = function (e, t) {
//         var o;
//         if (1 == t) {
//             if ((o = this._tiaozhanlevel[e])) {
//                 o.ispass = !0;
//             }
//             this._tiaozhanlevel[e] = o;
//             this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//             $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_TIAOZHAN_PASS);
//         }
//         if (2 == t) {
//             if ((o = this._level[e])) {
//                 o.ispass = !0;
//             }
//             this._level[e] = o;
//             this.unLockLevelPro(e + 1);
//             this._save(r.level, this._level);
//             $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_PASS);
//         }
//     };
//     t.prototype.getNowLevelPassState = function (e, t) {
//         var o;
//         if (1 == t) {
//             return (o = this._tiaozhanlevel[e]) ? (o.ispass ? 1 : 2) : -1;
//         } else {
//             return 2 == t ? ((o = this._level[e]) ? (o.ispass ? 1 : 2) : -1) : void 0;
//         }
//     };
//     t.prototype.getNowLevelBoshuState = function (e, t) {
//         var o;
//         var n;
//         if (1 == t) {
//             return (o = this._tiaozhanlevel[e]) ? ((n = o.nowboshu) || (n = 0), n) : 0;
//         } else {
//             return 2 == t ? ((o = this._level[e]) ? ((n = o.nowboshu) || (n = 0), n) : 0) : void 0;
//         }
//     };
//     t.prototype.getMaxLevelBoshuState = function (e, t) {
//         var o;
//         var n;
//         if (1 == t) {
//             return (o = this._tiaozhanlevel[e]) ? ((n = o.maxboshu) || (n = 0), n) : 0;
//         } else {
//             return 2 == t ? ((o = this._level[e]) ? ((n = o.maxboshu) || (n = 0), n) : 0) : void 0;
//         }
//     };
//     t.prototype.unTiaoZhanAwardJiLu = function (e, t) {
//         var o = this._tiaozhanlevel[e];
//         var n = o.awardjilu;
//         if (!n) {
//             n = {};
//         }
//         n[t] = "isok";
//         o.awardjilu = n;
//         this._tiaozhanlevel[e] = o;
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_Update_TiaoZhan_Award);
//         this._save(r.tiaozhanlevel, this._tiaozhanlevel);
//     };
//     t.prototype.getTiaoZhanAwardJilu = function (e, t) {
//         var o = this._tiaozhanlevel[e].awardjilu;
//         return !!o && o[t];
//     };
//     t.prototype.unLevelAwardJiLu = function (e, t) {
//         var o = this._level[e];
//         var n = o.awardjilu;
//         if (!n) {
//             n = {};
//         }
//         n[t] = "isok";
//         o.awardjilu = n;
//         this._level[e] = o;
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_Update_Level_Award);
//         this._save(r.level, this._level);
//     };
//     t.prototype.getLevelAwardJilu = function (e, t) {
//         var o = this._level[e].awardjilu;
//         return !!o && o[t];
//     };
//     t.prototype.getLevelAwardHave = function (e) {
//         var t = $excel.Excel.shuiguoguanqia(e);
//         if (t) {
//             var o = t.awardboshuid;
//             var n = this.getMaxLevelBoshuState(e, 2);
//             var i = !1;
//             for (var a = 0; a < o.length; a++) {
//                 var r = o[a];
//                 if (n >= r && !this.getLevelAwardJilu(e, r)) {
//                     i = !0;
//                     break;
//                 }
//             }
//             return i;
//         }
//     };
//     Object.defineProperty(t.prototype, "gameBag", {
//         get: function () {
//             return this._gameBag;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.ClearGameBagData = function () {
//         this._gameBag = new $gameBagData.GameBagData.BagSaveData();
//         this.SaveGameBagData();
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_YinBiValue);
//     };
//     t.prototype.SaveGameBagData = function () {
//         this._save(r.gameBag, this._gameBag);
//     };
//     Object.defineProperty(t.prototype, "sliderCoin", {
//         get: function () {
//             return this._gameBag.silverCoin || 0;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.AddSliderCoin = function (e) {
//         if (!Number.isNaN(e)) {
//             this._gameBag.silverCoin += e;
//         }
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_YinBiValue);
//         this.SaveGameBagData();
//     };
//     t.prototype.SubSliderCoin = function (e) {
//         if (!Number.isNaN(e)) {
//             if (this._gameBag.silverCoin < e) {
//                 $tipsManager.TipMgr.showToast("银币不足");
//                 return !1;
//             }
//             this._gameBag.silverCoin -= e;
//         }
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_YinBiValue);
//         this.SaveGameBagData();
//         return !0;
//     };
//     return t;
// })($dataManager.default);
// exports.GameDataMgr = g.getInstance();


// import DataManager from './DataManager';
// import { EventMgrInstance }  from './EventManager';
// import { TipMgrInstance } from './TipsManager';
// import CommonUtils from './CommonUtils';
// import { SendPointType } from './Const_Common';
// import { EVENT_TYPE } from './EvenType';
// import { Excel } from './Excel';
// import { GameBagData } from './GameBagData';

// enum DataType {
//     level = "level",
//     tiaozhanlevel = "tiaozhanlevel",
//     gameBag = "gameBag"
// }

// /** 
//  * 游戏数据管理类
//  * 建议类名: GameDataManager
//  */
// class GameDataManager extends DataManager {
//     private _secretKey: string = "game";
//     private _level = {
//         1: {
//             ispass: false,
//             maxboshu: 0,
//             nowboshu: 0,
//             awardjilu: 0,
//             citiaodata: null,
//             level: 1,
//             huanyipi: 0,
//             allhave: 0,
//             rolelevel: 0
//         }
//     };
//     private _tiaozhanlevel = {
//         1: {
//             isjixu: false,
//             ispass: false,
//             maxboshu: 0,
//             nowboshu: 0,
//             level: 1,
//             leijifen: 0,
//             awardjilu: null
//         }
//     };
//     private _gameBag: GameBagData.BagSaveData = new GameBagData.BagSaveData();

//     constructor() {
//         super();
//     }

//     /**
//      * 初始化游戏数据
//      * @param data 初始化数据
//      * 建议方法名: initialize
//      */
//     public init(data: any = null): void {
//         this.resetData();
//         const levelData = this.getNowData(DataType.level, data);
//         this._level = Object.assign(Object.assign({},this._level),levelData) //{ ...this._level, ...levelData };
//         const tiaozhanLevelData = this.getNowData(DataType.tiaozhanlevel, data);
//         this._tiaozhanlevel = Object.assign(Object.assign({},this._tiaozhanlevel),tiaozhanLevelData) //{ ...this._tiaozhanlevel, ...tiaozhanLevelData };
//         const gameBagData = this.getNowData(DataType.gameBag, data);
//         this._gameBag = Object.assign(Object.assign({},this._gameBag),gameBagData) //{ ...this._gameBag, ...gameBagData };

//     }

//     /**
//      * 获取当前数据
//      * @param type 数据类型
//      * @param data 数据
//      * @returns 当前数据
//      * 建议方法名: getCurrentData
//      */
//     private getNowData(type: DataType, data: any): any {
//         let result = null;
//         if (data && (result = data[type])) {
//             return result;
//         }
//         return this._load(type);
//     }

//     /**
//      * 重置数据
//      * 建议方法名: reset
//      */
//     public resetData(): void {
//         this._level = {
//             1: {
//                 ispass: false,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 awardjilu: 0,
//                 citiaodata: null,
//                 level: 1,
//                 huanyipi: 0,
//                 allhave: 0,
//                 rolelevel: 0
//             }
//         };
//         this._tiaozhanlevel = {
//             1: {
//                 isjixu: false,
//                 ispass: false,
//                 maxboshu: 0,
//                 nowboshu: 0,
//                 level: 1,
//                 leijifen: 0,
//                 awardjilu: null
//             }
//         };
//         this._gameBag = new GameBagData.BagSaveData();
//     }

//     /**
//      * 获取当前关卡数据
//      * @param level 关卡
//      * @returns 关卡数据
//      * 建议方法名: getCurrentLevelData
//      */
//     public nowLevelData(level: number): any {
//         return this._level[level];
//     }

//     /**
//      * 获取词条数量
//      * @param level 关卡
//      * @param type 类型
//      * @returns 词条数量
//      * 建议方法名: getCiTiaoCount
//      */
//     public getCiTiaoCount(level: number, type: number): number {
//         const levelData = this._level[level];
//         let count = 0;
//         if (levelData) {
//             switch (type) {
//                 case 1:
//                     count = levelData.huanyipi;
//                     break;
//                 case 2:
//                     count = levelData.allhave;
//             }
//         } else {
//             switch (type) {
//                 case 1:
//                     count = 10;
//                     break;
//                 case 2:
//                     count = 6;
//             }
//         }
//         return count;
//     }

//     /**
//      * 清除挑战关卡数据
//      * @param level 关卡
//      * 建议方法名: clearChallengeLevel
//      */
//     public cleanTiaoZhanLevel(level: number): void {
//         this._tiaozhanlevel[level] = {
//             isjixu: false,
//             ispass: false,
//             maxboshu: 0,
//             nowboshu: 0,
//             level: 1,
//             leijifen: 0,
//             awardjilu: null
//         };
//         this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
//     }

//     /**
//      * 更新挑战积分
//      * @param level 关卡
//      * @param points 积分
//      * 建议方法名: updateChallengePoints
//      */
//     public updateTiaoZhanFen(level: number, points: number): void {
//         const challengeData = this._tiaozhanlevel[level];
//         if (challengeData) {
//             let totalPoints = challengeData.leijifen || 0;
//             totalPoints += points;
//             challengeData.leijifen = totalPoints;
//             this._tiaozhanlevel[level] = challengeData;
//             this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
//             EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_TiaoZhan_JiFen);
//         }
//     }

//     /**
//      * 获取挑战积分
//      * @param level 关卡
//      * @returns 积分
//      * 建议方法名: getChallengePoints
//      */
//     public getTiaoZhanFen(level: number): number {
//         const challengeData = this._tiaozhanlevel[level];
//         return challengeData?.leijifen || 0;
//     }

//     /**
//      * 更新挑战继续状态
//      * @param level 关卡
//      * @param isContinue 是否继续
//      * 建议方法名: updateChallengeContinue
//      */
//     public updateTiaoZhanJiXu(level: number, isContinue: boolean): void {
//         const challengeData = this._tiaozhanlevel[level];
//         if (challengeData) {
//             challengeData.isjixu = isContinue;
//             this._tiaozhanlevel[level] = challengeData;
//             this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
//         }
//     }

//     /**
//      * 更新角色等级
//      * @param level 关卡
//      * @param roleLevel 角色等级
//      * @param experience 经验
//      * @param type 类型
//      * 建议方法名: updateRoleLevel
//      */
//     public updateRoleLevel(level: number, roleLevel: number, experience: number, type: number): void {
//         if (type === 2) {
//             const levelData = this._level[level];
//             if (levelData) {
//                 levelData.rolelevel = { level: roleLevel, levelexper: experience };
//                 this._level[level] = levelData;
//                 this._save(DataType.level, this._level);
//             }
//         }
//     }

//     /**
//      * 获取角色等级
//      * @param level 关卡
//      * @param type 类型
//      * @returns 角色等级
//      * 建议方法名: getRoleLevel
//      */
//     public getRoleLevel(level: number, type: number): any {
//         if (type === 2) {
//             return this._level[level]?.rolelevel || null;
//         }
//     }

//     /**
//      * 更新当前关卡
//      * @param level 关卡
//      * @param huanyipi 换一批
//      * @param allhave 全部拥有
//      * @param type 类型
//      * 建议方法名: updateCurrentLevel
//      */
//     public updateNowLevel(level: number, huanyipi: number, allhave: number, type: number): void {
//         if (type === 2) {
//             const levelData = this._level[level];
//             if (levelData) {
//                 levelData.huanyipi = huanyipi;
//                 levelData.allhave = allhave;
//                 this._level[level] = levelData;
//                 this._save(DataType.level, this._level);
//             }
//         }
//     }

//     /**
//      * 解锁关卡进度
//      * @param level 关卡
//      * 建议方法名: unlockLevelProgress
//      */
//     public unLockLevelPro(level: number): void {
//         this._level[level] = {
//             ispass: false,
//             nowboshu: 0,
//             awardjilu: {},
//             level: level
//         };
//         this._save(DataType.level, this._level);
//     }

//     /**
//      * 获取继续游戏数据
//      * @returns 继续游戏数据
//      * 建议方法名: getContinueGame
//      */
//     public getJiXuGame(): any {
//         const levels = Object.keys(this._level);
//         let continueGameData = null;
//         for (const level of levels) {
//             const levelData = this._level[level];
//             const excelData = Excel.shuiguoguanqia(Number(level));
//             if (levelData && levelData.citiaodata) {
//                 if (excelData.levelboshuid.length <= levelData.maxboshu) {
//                     this.updateLevelPassState(Number(level), 2);
//                 }
//                 if (excelData.levelboshuid.length > levelData.nowboshu) {
//                     continueGameData = levelData;
//                 }
//                 break;
//             }
//         }
//         return continueGameData;
//     }

//     /**
//      * 获取继续挑战状态
//      * @returns 是否继续挑战
//      * 建议方法名: getContinueChallenge
//      */
//     public getJiXuTiaoZhan(): boolean {
//         return !!this._tiaozhanlevel[1].isjixu;
//     }

//     /**
//      * 更新词条数据
//      * @param level 关卡
//      * @param data 词条数据
//      * 建议方法名: updateCiTiaoData
//      */
//     public updateCiTiao(level: number, data: any): void {
//         const levelData = this._level[level];
//         if (levelData) {
//             levelData.citiaodata = data ? data.concat() : null;
//             this._save(DataType.level, this._level);
//         }
//     }

//     /**
//      * 获取当前最大关卡
//      * @returns 最大关卡
//      * 建议方法名: getCurrentMaxLevel
//      */
//     public getNowMaxLevel(): number {
//         // const passedLevels = Object.keys(this._level).filter(level => this._level[level].ispass).map(Number);
//         // if (passedLevels.length === 0) {
//         //     return 0;
//         // }
//         // return Math.max(...passedLevels);

//         var e = [];
//                 var t = this._level;
//                 for (var o in t)
//                     if (t[o] && t[o].ispass) {
//                         e.push(Number(o));
//                     }
//                 if (
//                     (e = e.sort(function (e, t) {
//                         if (e > t) {
//                             return 1;
//                         } else {
//                             return -1;
//                         }
//                     })).length <= 0
//                 ) {
//                     return 0;
//                 } else {
//                     return e[e.length - 1];
//                 }
//     }

//     /**
//      * 更新关卡波数
//      * @param level 关卡
//      * @param boshu 波数
//      * @param type 类型
//      * 建议方法名: updateLevelWave
//      */
//     public updateLevelBoShu(level: number, boshu: number, type: number): void {
//         let levelData;
//         let excelData;
//         if (type === 1) {
//             levelData = this._tiaozhanlevel[level];
//             excelData = Excel.shuiguotiaozhan(level);
//         } else if (type === 2) {
//             levelData = this._level[level];
//             excelData = Excel.shuiguoguanqia(level);
//         }

//         if (levelData) {
//             let maxBoshu = levelData.maxboshu || 0;
//             if (boshu > excelData.levelboshuid.length) {
//                 boshu = excelData.levelboshuid.length;
//             }
//             if (boshu >= maxBoshu) {
//                 levelData.maxboshu = boshu;
//                 if (type === 2) {
//                     const point = `章节${level}_${boshu}波`;
//                     CommonUtils.SendPoint(SendPointType.普通关卡进度, point);
//                 }
//             }
//             levelData.nowboshu = boshu;
//             if (!excelData.levelboshuid[boshu]) {
//                 this.updateLevelPassState(level, type);
//                 if (type === 1) {
//                     const point = "无尽关卡通关";
//                     CommonUtils.SendPoint(SendPointType.通关无尽关卡, point);
//                 }
//             }
//             this._save(type === 1 ? DataType.tiaozhanlevel : DataType.level, levelData);
//         }
//     }

//     /**
//      * 更新关卡通过状态
//      * @param level 关卡
//      * @param type 类型
//      * 建议方法名: updateLevelPassState
//      */
//     public updateLevelPassState(level: number, type: number): void {
//         let levelData;
//         if (type === 1) {
//             levelData = this._tiaozhanlevel[level];
//             if (levelData) {
//                 levelData.ispass = true;
//                 this._tiaozhanlevel[level] = levelData;
//                 this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
//                 EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_TIAOZHAN_PASS);
//             }
//         } else if (type === 2) {
//             levelData = this._level[level];
//             if (levelData) {
//                 levelData.ispass = true;
//                 this._level[level] = levelData;
//                 this.unLockLevelPro(level + 1);
//                 this._save(DataType.level, this._level);
//                 EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_PASS);
//             }
//         }
//     }

//     /**
//      * 获取当前关卡通过状态
//      * @param level 关卡
//      * @param type 类型
//      * @returns 通过状态
//      * 建议方法名: getCurrentLevelPassState
//      */
//     public getNowLevelPassState(level: number, type: number): number | undefined {
//         let levelData;
//         if (type === 1) {
//             levelData = this._tiaozhanlevel[level];
//             return levelData ? (levelData.ispass ? 1 : 2) : -1;
//         } else if (type === 2) {
//             levelData = this._level[level];
//             return levelData ? (levelData.ispass ? 1 : 2) : -1;
//         }
//     }

//     /**
//      * 获取当前关卡波数状态
//      * @param level 关卡
//      * @param type 类型
//      * @returns 波数状态
//      * 建议方法名: getCurrentLevelWaveState
//      */
//     public getNowLevelBoshuState(level: number, type: number): number | undefined {
//         let levelData;
//         if (type === 1) {
//             levelData = this._tiaozhanlevel[level];
//             return levelData ? (levelData.nowboshu || 0) : 0;
//         } else if (type === 2) {
//             levelData = this._level[level];
//             return levelData ? (levelData.nowboshu || 0) : 0;
//         }
//     }

//     /**
//      * 获取最大关卡波数状态
//      * @param level 关卡
//      * @param type 类型
//      * @returns 最大波数状态
//      * 建议方法名: getMaxLevelWaveState
//      */
//     public getMaxLevelBoshuState(level: number, type: number): number | undefined {
//         let levelData;
//         if (type === 1) {
//             levelData = this._tiaozhanlevel[level];
//             return levelData ? (levelData.maxboshu || 0) : 0;
//         } else if (type === 2) {
//             levelData = this._level[level];
//             return levelData ? (levelData.maxboshu || 0) : 0;
//         }
//     }

//     /**
//      * 更新挑战奖励记录
//      * @param level 关卡
//      * @param award 奖励
//      * 建议方法名: updateChallengeAwardRecord
//      */
//     public unTiaoZhanAwardJiLu(level: number, award: number): void {
//         const challengeData = this._tiaozhanlevel[level];
//         let awardRecord = challengeData.awardjilu || {};
//         awardRecord[award] = "isok";
//         challengeData.awardjilu = awardRecord;
//         this._tiaozhanlevel[level] = challengeData;
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_Update_TiaoZhan_Award);
//         this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
//     }

//     /**
//      * 获取挑战奖励记录
//      * @param level 关卡
//      * @param award 奖励
//      * @returns 是否有奖励记录
//      * 建议方法名: getChallengeAwardRecord
//      */
//     public getTiaoZhanAwardJilu(level: number, award: number): boolean {
//         const awardRecord = this._tiaozhanlevel[level]?.awardjilu;
//         return !!awardRecord && !!awardRecord[award];
//     }

//     /**
//      * 更新关卡奖励记录
//      * @param level 关卡
//      * @param award 奖励
//      * 建议方法名: updateLevelAwardRecord
//      */
//     public unLevelAwardJiLu(level: number, award: number): void {
//         const levelData = this._level[level];
//         let awardRecord = levelData.awardjilu || {};
//         awardRecord[award] = "isok";
//         levelData.awardjilu = awardRecord;
//         this._level[level] = levelData;
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_Update_Level_Award);
//         this._save(DataType.level, this._level);
//     }

//     /**
//      * 获取关卡奖励记录
//      * @param level 关卡
//      * @param award 奖励
//      * @returns 是否有奖励记录
//      * 建议方法名: getLevelAwardRecord
//      */
//     public getLevelAwardJilu(level: number, award: number): boolean {
//         const awardRecord = this._level[level]?.awardjilu;
//         return !!awardRecord && !!awardRecord[award];
//     }

//     /**
//      * 获取关卡奖励是否存在
//      * @param level 关卡
//      * @returns 是否存在奖励     
//      * 建议方法名: hasLevelAward
//          */
//     public getLevelAwardHave(level: number): boolean {
//         const levelData = Excel.shuiguoguanqia(level);
//         if (levelData) {
//             const awardBoshuIds = levelData.awardboshuid;
//             const maxBoshuState = this.getMaxLevelBoshuState(level, 2);
//             for (const boshuId of awardBoshuIds) {
//                 if (maxBoshuState >= boshuId && !this.getLevelAwardJilu(level, boshuId)) {
//                     return true;
//                 }
//             }
//         }
//         return false;
//     }

//     /**
//      * 获取游戏背包数据
//      * @returns 游戏背包数据
//      * 建议方法名: getGameBag
//      */
//     public get gameBag(): GameBagData.BagSaveData {
//         return this._gameBag;
//     }

//     /**
//      * 清除游戏背包数据
//      * 建议方法名: clearGameBagData
//      */
//     public ClearGameBagData(): void {
//         this._gameBag = new GameBagData.BagSaveData();
//         this.SaveGameBagData();
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_YinBiValue);
//     }

//     /**
//      * 保存游戏背包数据
//      * 建议方法名: saveGameBagData
//      */
//     public SaveGameBagData(): void {
//         this._save(DataType.gameBag, this._gameBag);
//     }

//     /**
//      * 获取银币数量
//      * @returns 银币数量
//      * 建议方法名: getSilverCoin
//      */
//     public get sliderCoin(): number {
//         return this._gameBag.silverCoin || 0;
//     }

//     /**
//      * 增加银币
//      * @param amount 增加数量
//      * 建议方法名: addSilverCoin
//      */
//     public AddSliderCoin(amount: number): void {
//         if (!Number.isNaN(amount)) {
//             this._gameBag.silverCoin += amount;
//         }
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_YinBiValue);
//         this.SaveGameBagData();
//     }

//     /**
//      * 减少银币
//      * @param amount 减少数量
//      * @returns 是否成功
//      * 建议方法名: subtractSilverCoin
//      */
//     public SubSliderCoin(amount: number): boolean {
//         if (!Number.isNaN(amount)) {
//             if (this._gameBag.silverCoin < amount) {
//                 TipMgrInstance.showToast("银币不足");
//                 return false;
//             }
//             this._gameBag.silverCoin -= amount;
//         }
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_YinBiValue);
//         this.SaveGameBagData();
//         return true;
//     }
// }

// export const GameDataMgr = new GameDataManager();


import DataManager from './DataManager';
import { EventMgrInstance } from './EventManager';
import { TipMgr } from './TipsManager';
import { EVENT_TYPE } from './EvenType';
import { Excel } from './Excel';
import { GameBagData } from './GameBagData';

enum DataType {
    level = "level",
    tiaozhanlevel = "tiaozhanlevel",
    gameBag = "gameBag"
}

/** 
 * 游戏数据管理类
 * 建议类名: GameDataManager
 */
class GameDataManager extends DataManager {
    private _secretKey: string = "game";
    private _level = {
        1: {
            ispass: false,
            maxboshu: 0,
            nowboshu: 0,
            awardjilu: 0,
            citiaodata: null,
            level: 1,
            huanyipi: 0,
            allhave: 0,
            rolelevel: 0
        }
    };
    private _tiaozhanlevel = {
        1: {
            isjixu: false,
            ispass: false,
            maxboshu: 0,
            nowboshu: 0,
            level: 1,
            leijifen: 0,
            awardjilu: null
        }
    };
    private _gameBag: GameBagData.BagSaveData = new GameBagData.BagSaveData();

    constructor() {
        super();
    }

    /**
     * 初始化游戏数据
     * @param data 初始化数据
     * 建议方法名: initialize
     */
    public initialize(data: any = null): void {
        this.reset();
        this._level = Object.assign({}, this._level, this.getCurrentData(DataType.level, data));
        this._tiaozhanlevel = Object.assign({}, this._tiaozhanlevel, this.getCurrentData(DataType.tiaozhanlevel, data));
        this._gameBag = Object.assign({}, this._gameBag, this.getCurrentData(DataType.gameBag, data));
    }

    /**
     * 获取当前数据
     * @param type 数据类型
     * @param data 数据
     * @returns 当前数据
     * 建议方法名: getCurrentData
     */
    private getCurrentData(type: DataType, data: any): any {
        return (data && data[type]) ? data[type] : this._load(type);
    }

    /**
     * 重置数据
     * 建议方法名: reset
     */
    public reset(): void {
        this._level = {
            1: {
                ispass: false,
                maxboshu: 0,
                nowboshu: 0,
                awardjilu: 0,
                citiaodata: null,
                level: 1,
                huanyipi: 0,
                allhave: 0,
                rolelevel: 0
            }
        };
        this._tiaozhanlevel = {
            1: {
                isjixu: false,
                ispass: false,
                maxboshu: 0,
                nowboshu: 0,
                level: 1,
                leijifen: 0,
                awardjilu: null
            }
        };
        this._gameBag = new GameBagData.BagSaveData();
    }

    /**
     * 获取当前关卡数据
     * @param level 关卡
     * @returns 关卡数据
     * 建议方法名: getCurrentLevelData
     */
    public getCurrentLevelData(level: number): any {
        return this._level[level];
    }

    /**
     * 获取词条数量
     * @param level 关卡
     * @param type 类型
     * @returns 词条数量
     * 建议方法名: getCiTiaoCount
     */
    public getCiTiaoCount(level: number, type: number): number {
        const levelData = this._level[level];
        if (levelData) {
            return type === 1 ? levelData.huanyipi : levelData.allhave;
        }
        return type === 1 ? 10 : 6;
    }

    /**
     * 清除挑战关卡数据
     * @param level 关卡
     * 建议方法名: clearChallengeLevel
     */
    public clearChallengeLevel(level: number): void {
        this._tiaozhanlevel[level] = {
            isjixu: false,
            ispass: false,
            maxboshu: 0,
            nowboshu: 0,
            level: 1,
            leijifen: 0,
            awardjilu: null
        };
        this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
    }

    /**
     * 更新挑战积分
     * @param level 关卡
     * @param points 积分
     * 建议方法名: updateChallengePoints
     */
    public updateChallengePoints(level: number, points: number): void {
        const challengeData = this._tiaozhanlevel[level];
        if (challengeData) {
            const totalPoints = (challengeData.leijifen || 0) + points;
            challengeData.leijifen = totalPoints;
            this._tiaozhanlevel[level] = challengeData;
            this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
            EventMgrInstance.emitEvent(EVENT_TYPE.Game_TiaoZhan_JiFen);
        }
    }

    /**
     * 获取挑战积分
     * @param level 关卡
     * @returns 积分
     * 建议方法名: getChallengePoints
     */
    public getChallengePoints(level: number): number {
        return this._tiaozhanlevel[level]?.leijifen || 0;
    }

    /**
     * 更新挑战继续状态
     * @param level 关卡
     * @param isContinue 是否继续
     * 建议方法名: updateChallengeContinue
     */
    public updateChallengeContinue(level: number, isContinue: boolean): void {
        const challengeData = this._tiaozhanlevel[level];
        if (challengeData) {
            challengeData.isjixu = isContinue;
            this._tiaozhanlevel[level] = challengeData;
            this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
        }
    }

    /**
     * 更新角色等级
     * @param level 关卡
     * @param roleLevel 角色等级
     * @param experience 经验
     * @param type 类型
     * 建议方法名: updateRoleLevel
     */
    public updateRoleLevel(level: number, roleLevel: number, experience: number, type: number): void {
        if (type === 2) {
            const levelData = this._level[level];
            if (levelData) {
                levelData.rolelevel = { level: roleLevel, levelexper: experience };
                this._level[level] = levelData;
                this._save(DataType.level, this._level);
            }
        }
    }

    /**
     * 获取角色等级
     * @param level 关卡
     * @param type 类型
     * @returns 角色等级
     * 建议方法名: getRoleLevel
     */
    public getRoleLevel(level: number, type: number): any {
        return type === 2 ? this._level[level]?.rolelevel || null : null;
    }

    /**
     * 更新当前关卡
     * @param level 关卡
     * @param huanyipi 换一批
     * @param allhave 全部拥有
     * @param type 类型
     * 建议方法名: updateCurrentLevel
     */
    public updateCurrentLevel(level: number, huanyipi: number, allhave: number, type: number): void {
        if (type === 2) {
            const levelData = this._level[level];
            if (levelData) {
                levelData.huanyipi = huanyipi;
                levelData.allhave = allhave;
                this._level[level] = levelData;
                this._save(DataType.level, this._level);
            }
        }
    }

    /**
     * 解锁关卡进度
     * @param level 关卡
     * 建议方法名: unlockLevelProgress
     */
    public unlockLevelProgress(level: number): void {
        this._level[level] = {
            ispass: false,
            nowboshu: 0,
            awardjilu: {},
            level: level
        };
        this._save(DataType.level, this._level);
    }

    /**
     * 获取继续游戏数据
     * @returns 继续游戏数据
     * 建议方法名: getContinueGame
     */
    public getContinueGame(): any {
        for (const level in this._level) {
            const levelData = this._level[level];
            if (levelData && levelData.citiaodata) {
                const excelData = Excel.shuiguoguanqia(Number(level));
                if (excelData.levelboshuid.length <= levelData.maxboshu) {
                    this.updateLevelPassState(Number(level), 2);
                }
                if (excelData.levelboshuid.length > levelData.nowboshu) {
                    return levelData;
                }
                break;
            }
        }
        return null;
    }

    /**
     * 获取继续挑战状态
     * @returns 是否继续挑战
     * 建议方法名: getContinueChallenge
     */
    public getContinueChallenge(): boolean {
        return !!this._tiaozhanlevel[1].isjixu;
    }

    /**
     * 更新词条数据
     * @param level 关卡
     * @param data 词条数据
     * 建议方法名: updateCiTiaoData
     */
    public updateCiTiaoData(level: number, data: any): void {
        const levelData = this._level[level];
        if (levelData) {
            levelData.citiaodata = data ? data.concat() : null;
            this._save(DataType.level, this._level);
        }
    }

    /**
     * 获取当前最大关卡
     * @returns 最大关卡
     * 建议方法名: getCurrentMaxLevel
     */
    public getCurrentMaxLevel(): number {
        var e = [];
        var t = this._level;
        for (var o in t)
            if (t[o] && t[o].ispass) {
                e.push(Number(o));
            }
        if (
            (e = e.sort(function (e, t) {
                if (e > t) {
                    return 1;
                } else {
                    return -1;
                }
            })).length <= 0
        ) {
            return 0;
        } else {
            return e[e.length - 1];
        }

    }

    /**
     * 更新关卡波数
     * @param level 关卡
     * @param boshu 波数
     * @param type 类型
     * 建议方法名: updateLevelWave
     */
    public updateLevelWave(level: number, boshu: number, type: number): void {
        let levelData;
        let excelData;
        if (type === 1) {
            levelData = this._tiaozhanlevel[level];
            excelData = Excel.shuiguotiaozhan(level);
        } else if (type === 2) {
            levelData = this._level[level];
            excelData = Excel.shuiguoguanqia(level);
        }

        if (levelData) {
            const maxBoshu = levelData.maxboshu || 0;
            boshu = Math.min(boshu, excelData.levelboshuid.length);

            if (boshu >= maxBoshu) {
                levelData.maxboshu = boshu;
                // if (type === 2) {
                //     CommonUtils.sendTrackingEvent(SendPointType.NormalLevelProgress, `章节${level}_${boshu}波`);
                // }
            }
            levelData.nowboshu = boshu;

            if (!excelData.levelboshuid[boshu]) {
                this.updateLevelPassState(level, type);
                // if (type === 1) {
                //     CommonUtils.sendTrackingEvent(SendPointType.CompleteEndlessLevel, "无尽关卡通关");
                // }
            }
            this._save(type === 1 ? DataType.tiaozhanlevel : DataType.level, levelData);
        }
    }

    /**
     * 更新关卡通过状态
     * @param level 关卡
     * @param type 类型
     * 建议方法名: updateLevelPassState
     */
    public updateLevelPassState(level: number, type: number): void {
        if (type === 1) {
            const levelData = this._tiaozhanlevel[level];
            if (levelData) {
                levelData.ispass = true;
                this._tiaozhanlevel[level] = levelData;
                this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
                EventMgrInstance.emitEvent(EVENT_TYPE.Game_TIAOZHAN_PASS);
            }
        } else if (type === 2) {
            const levelData = this._level[level];
            if (levelData) {
                levelData.ispass = true;
                this._level[level] = levelData;
                this.unlockLevelProgress(level + 1);
                this._save(DataType.level, this._level);
                EventMgrInstance.emitEvent(EVENT_TYPE.Game_PASS);
            }
        }
    }

    /**
     * 获取当前关卡通过状态
     * @param level 关卡
     * @param type 类型
     * @returns 通过状态
     * 建议方法名: getCurrentLevelPassState
     */
    public getCurrentLevelPassState(level: number, type: number): number | undefined {
        if (type === 1) {
            const levelData = this._tiaozhanlevel[level];
            return levelData ? (levelData.ispass ? 1 : 2) : -1;
        } else if (type === 2) {
            const levelData = this._level[level];
            return levelData ? (levelData.ispass ? 1 : 2) : -1;
        }
    }

    /**
     * 获取当前关卡波数状态
     * @param level 关卡
     * @param type 类型
     * @returns 波数状态
     * 建议方法名: getCurrentLevelWaveState
     */
    public getCurrentLevelWaveState(level: number, type: number): number | undefined {
        if (type === 1) {
            const levelData = this._tiaozhanlevel[level];
            return levelData ? (levelData.nowboshu || 0) : 0;
        } else if (type === 2) {
            const levelData = this._level[level];
            return levelData ? (levelData.nowboshu || 0) : 0;
        }
    }

    /**
     * 获取最大关卡波数状态
     * @param level 关卡
     * @param type 类型
     * @returns 最大波数状态
     * 建议方法名: getMaxLevelWaveState
     */
    public getMaxLevelWaveState(level: number, type: number): number | undefined {
        if (type === 1) {
            const levelData = this._tiaozhanlevel[level];
            return levelData ? (levelData.maxboshu || 0) : 0;
        } else if (type === 2) {
            const levelData = this._level[level];
            return levelData ? (levelData.maxboshu || 0) : 0;
        }
    }

    /**
     * 更新挑战奖励记录
     * @param level 关卡
     * @param award 奖励
     * 建议方法名: updateChallengeAwardRecord
     */
    public updateChallengeAwardRecord(level: number, award: number): void {
        const challengeData = this._tiaozhanlevel[level];
        challengeData.awardjilu = challengeData.awardjilu || {};
        challengeData.awardjilu[award] = "isok";
        this._tiaozhanlevel[level] = challengeData;
        EventMgrInstance.emitEvent(EVENT_TYPE.Game_Update_TiaoZhan_Award);
        this._save(DataType.tiaozhanlevel, this._tiaozhanlevel);
    }

    /**
     * 获取挑战奖励记录
     * @param level 关卡
     * @param award 奖励
     * @returns 是否有奖励记录
     * 建议方法名: getChallengeAwardRecord
     */
    public getChallengeAwardRecord(level: number, award: number): boolean {
        const awardRecord = this._tiaozhanlevel[level]?.awardjilu;
        return !!awardRecord && !!awardRecord[award];
    }

    /**
     * 更新关卡奖励记录
     * @param level 关卡
     * @param award 奖励
     * 建议方法名: updateLevelAwardRecord
     */
    public updateLevelAwardRecord(level: number, award: number): void {
        const levelData = this._level[level];
        levelData.awardjilu = levelData.awardjilu || {};
        levelData.awardjilu[award] = "isok";
        this._level[level] = levelData;
        EventMgrInstance.emitEvent(EVENT_TYPE.Game_Update_Level_Award);
        this._save(DataType.level, this._level);
    }

    /**
     * 获取关卡奖励记录
     * @param level 关卡
     * @param award 奖励
     * @returns 是否有奖励记录
     * 建议方法名: getLevelAwardRecord
     */
    public getLevelAwardRecord(level: number, award: number): boolean {
        const awardRecord = this._level[level]?.awardjilu;
        return !!awardRecord && !!awardRecord[award];
    }

    /**
     * 获取关卡奖励是否存在
     * @param level 关卡
     * @returns 是否存在奖励     
     * 建议方法名: hasLevelAward
     */
    public hasLevelAward(level: number): boolean {
        const levelData = Excel.shuiguoguanqia(level);
        if (levelData) {
            const awardBoshuIds = levelData.awardboshuid;
            const maxBoshuState = this.getMaxLevelWaveState(level, 2);
            return awardBoshuIds.some(boshuId => maxBoshuState >= boshuId && !this.getLevelAwardRecord(level, boshuId));
        }
        return false;
    }

    /**
     * 获取游戏背包数据
     * @returns 游戏背包数据
     * 建议方法名: getGameBag
     */
    public get getGameBag(): GameBagData.BagSaveData {
        return this._gameBag;
    }

    /**
     * 清除游戏背包数据
     * 建议方法名: clearGameBagData
     */
    public clearGameBagData(): void {
        this._gameBag = new GameBagData.BagSaveData();
        this.saveGameBagData();
        EventMgrInstance.emitEvent(EVENT_TYPE.Game_YinBiValue);
    }

    /**
     * 保存游戏背包数据
     * 建议方法名: saveGameBagData
     */
    public saveGameBagData(): void {
        this._save(DataType.gameBag, this._gameBag);
    }

    /**
     * 获取银币数量
     * @returns 银币数量
     * 建议方法名: getSilverCoin
     */
    public get getSilverCoin(): number {
        return this._gameBag.silverCoin || 0;
    }

    /**
     * 增加银币
     * @param amount 增加数量
     * 建议方法名: addSilverCoin
     */
    public addSilverCoin(amount: number): void {
        if (!Number.isNaN(amount)) {
            this._gameBag.silverCoin += amount;
        }
        EventMgrInstance.emitEvent(EVENT_TYPE.Game_YinBiValue);
        this.saveGameBagData();
    }

    /**
     * 减少银币
     * @param amount 减少数量
     * @returns 是否成功
     * 建议方法名: subtractSilverCoin
     */
    public subtractSilverCoin(amount: number): boolean {
        if (!Number.isNaN(amount)) {
            if (this._gameBag.silverCoin < amount) {
                TipMgr.showToast("银币不足");
                return false;
            }
            this._gameBag.silverCoin -= amount;
        }
        EventMgrInstance.emitEvent(EVENT_TYPE.Game_YinBiValue);
        this.saveGameBagData();
        return true;
    }
}

export const GameDataMgr = new GameDataManager();
